#include "App_DisplayDemo.h"

void App_Display_Init(void)
{
      /* 0. 启动定时器,用于给lvgl提供时基础 */
      Driver_TIM6_Init();
      Driver_TIM6_Start();

      /* 1. 初始化lvgl库 */
      lv_init();
      /* 2. 初始化显示设备 */
      lv_port_disp_init();
      /* 3. 初始化输入设备(触摸设备) */
      lv_port_indev_init();
}

void btn_cb(lv_event_t *e)
{
      static uint8_t cnt = 0;
      lv_obj_t *obj  = lv_event_get_current_target(e);
      lv_obj_t *label = lv_obj_get_child(obj, 0);
      lv_label_set_text_fmt(label, "Atguigu %d", cnt++);
}

/* 创建一个按钮 */
void App_Display_CreateButton(void)
{
      lv_obj_t *btn = lv_btn_create(lv_scr_act());
      lv_obj_align(btn, LV_ALIGN_CENTER, 0, 0);
      lv_obj_set_height(btn, 30);
      lv_obj_add_event_cb(btn, btn_cb, LV_EVENT_PRESSED, NULL);

      lv_obj_t *label;
      label = lv_label_create(btn);
      lv_obj_align(label, LV_ALIGN_CENTER, 0, 0);
      lv_label_set_text(label, "Atguigu");

      static lv_style_t style_btn;
      lv_style_init(&style_btn);
      lv_style_set_radius(&style_btn, 10);
      lv_style_set_border_color(&style_btn, lv_color_black());
      lv_style_set_border_opa(&style_btn, LV_OPA_30);
      lv_obj_add_style(btn, &style_btn, LV_STATE_DEFAULT);
}

/**
 * @brief 事件处理函数，用于处理 LVGL 控件触发的事件,按钮点击后触发事件
 *
 * 该函数根据不同的事件代码执行相应的操作，主要处理点击事件和值改变事件。
 *
 * @param e 指向 lv_event_t 结构体的指针，包含事件相关信息
 */
static void event_handler(lv_event_t * e)
{
    // 获取事件的代码，用于判断具体发生了哪种事件
    lv_event_code_t code = lv_event_get_code(e);

    // 检查事件代码是否为点击事件
    if(code == LV_EVENT_CLICKED) {
        // 若为点击事件，使用 LVGL 的日志功能记录用户操作信息
        debug_printfln("Clicked");
    }
    // 检查事件代码是否为值改变事件
    else if(code == LV_EVENT_VALUE_CHANGED) {
        // 若为值改变事件，使用 LVGL 的日志功能记录用户操作信息
        debug_printfln("Toggled");
    }
}

/**
 * @brief 创建一个按钮
 *
 * 此函数用于创建一个带有特定文本标签的按钮，并为按钮添加事件处理函数。
 * 按钮会被放置在屏幕的中心偏上位置。
 */
void lv_example_btn__CreateButton(void)
{
    // 声明一个指向标签对象的指针
    lv_obj_t * label;

    // 创建一个按钮对象，父对象为当前活动屏幕
    lv_obj_t * btn1 = lv_btn_create(lv_scr_act());
    // 为按钮添加事件回调函数，当按钮触发任何事件时，都会调用 event_handler 函数
    lv_obj_add_event_cb(btn1, event_handler, LV_EVENT_ALL, NULL);
    // 将按钮对齐到屏幕中心，并向上偏移 40 个像素
    lv_obj_align(btn1, LV_ALIGN_CENTER, 0, -40);

    // 在按钮上创建一个标签对象
    label = lv_label_create(btn1);
    // 设置标签的文本为 "Button"
    lv_label_set_text(label, "Button");
    // 将标签居中显示在按钮上
    lv_obj_center(label);

    lv_obj_t * btn2 = lv_btn_create(lv_scr_act());
    lv_obj_add_event_cb(btn2, event_handler, LV_EVENT_ALL, NULL);
    lv_obj_align(btn2, LV_ALIGN_CENTER, 0, 40);
    lv_obj_add_flag(btn2, LV_OBJ_FLAG_CHECKABLE);
    lv_obj_set_height(btn2, LV_SIZE_CONTENT);

    label = lv_label_create(btn2);
    lv_label_set_text(label, "Toggle");
    lv_obj_center(label);
}




